#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N=1e6+3,M=N*4,INF=1e9;
int n,m;
map<int,int>pl[N],pr[N];
multiset<int>SL,SR;
struct SGT
{
	#define ls (p<<1)
	#define rs (p<<1|1)
	#define mi ((l+r)>>1)
	#define lson ls,l,mi
	#define rson rs,mi+1,r
	int ans[M],kl[M],kr[M];
	void Build(int p=1,int l=1,int r=n)
	{
		ans[p]=kr[p]=INF;kl[p]=-INF;
		if(l==r)return;
		Build(lson);Build(rson); 
	}
	void Up(int p)
	{
		ans[p]=min({ans[ls],ans[rs],kr[rs]-kl[ls]});
		kl[p]=max(kl[ls],kl[rs]);kr[p]=min(kr[ls],kr[rs]);
	}
	void UpdL(int k,int d,int p=1,int l=1,int r=n)
	{
		if(l==r){kl[p]=d;ans[p]=kr[p]-kl[p];return;}
		k<=mi?UpdL(k,d,lson):UpdL(k,d,rson);Up(p); 
	}
	void UpdR(int k,int d,int p=1,int l=1,int r=n)
	{
		if(l==r){kr[p]=d;ans[p]=kr[p]-kl[p];return;}
		k<=mi?UpdR(k,d,lson):UpdR(k,d,rson);Up(p); 
	}
}T;
int main()
{
	freopen("stone.in","r",stdin);
	freopen("stone.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>m;n=1e6;char ch;T.Build();
	while(m--)
	{
		int l,r;cin>>ch>>l>>r;
		if(ch=='A')pl[l][r]++,pr[r][l]++;
		else pl[l][r]--,pr[r][l]--;
		if(ch=='A'&&pl[l][r]==1)
		{
			T.UpdL(r,pr[r].rbegin()->first);
			T.UpdR(l,pl[l].begin()->first);
			SL.insert(l);SR.insert(r);
		}
		if(ch=='R'&&pl[l][r]==0)
		{
			pl[l].erase(r);pr[r].erase(l);
			if(pr[r].size())T.UpdL(r,pr[r].rbegin()->first);
			else T.UpdL(r,-INF);
			if(pl[l].size())T.UpdR(l,pl[l].begin()->first);
			else T.UpdR(l,INF);
			SL.erase(SL.find(l));SR.erase(SR.find(r));
		}
		int lmx=*SL.rbegin(),rmn=*SR.begin();
		if(rmn>lmx)
		{
			int sr=pl[lmx].begin()->first,sl=pr[rmn].rbegin()->first;
			cout<<sr-sl<<"\n";continue;
		}
		cout<<T.ans[1]<<"\n";
	}
}
